package br.com.logistica.delegate ;

import org.apache.log4j.Logger ;

import br.com.logistica.base.BaseException;
import br.com.logistica.exception.ClienteException;
import br.com.logistica.exception.ProdutoException;
import br.com.logistica.exception.TransportadoraException;
import br.com.logistica.util.dto.ServiceDTO ;
import br.com.smart.logistica.services.ClienteSCN;
import br.com.smart.logistica.services.ConhecimentoSCN;
import br.com.smart.logistica.services.ProdutoSCN;
import br.com.smart.logistica.services.TransportadoraSCN;


public class BusinessDelegate
{
    private static ServiceDTO       result   = null ;
	private static Logger           logger   = Logger.getLogger( BusinessDelegate.class ) ;
	private static BusinessDelegate instance = null ;

	private BusinessDelegate( )
	{
	}


	public synchronized static BusinessDelegate getInstance( )
	{
		if ( instance == null )
		{
			instance = new BusinessDelegate( ) ;
		}
		
		return( instance ) ;
	}

	public ServiceDTO inserirCliente( ServiceDTO requestDTO ) throws BaseException
	{
		try
		{
			result = ClienteSCN.insereCliente( requestDTO ) ;
		}
		catch ( ClienteException e )
		{
			result.set( "erro", e.getMessage( ) ) ;
		}
		
		return( result ) ;
	}

	public ServiceDTO deletarCliente( ServiceDTO requestDTO ) throws BaseException
	{
		try
		{
			result = ClienteSCN.deleteCliente( requestDTO ) ;
		}
		catch( ClienteException e )
		{
			logger.error( e ) ;
			
			result.set( "erro", e.getMessage( ) ) ;
		}
		
		return( result ) ;
	}

	public ServiceDTO pesquisarTodosClientes( ) throws BaseException
	{
		try
		{
			result = ClienteSCN.pesquisar( ) ;
		}
		catch( ClienteException e )
		{
			result.set( "erro", e.getMessage( ) ) ;
		}
		
		return( result ) ;
	}

	public ServiceDTO pesquisarCliente( ServiceDTO requestDTO ) throws BaseException
	{
		try
		{
			result = ClienteSCN.pesquisar( requestDTO ) ;
		}
		catch ( ClienteException e )
		{
			result.set( "erro", e.getMessage( ) ) ;
		}
		
		return( result ) ;
	}

	public ServiceDTO inserirTransportadora( ServiceDTO requestDTO ) throws BaseException
	{
		try
		{
			result = TransportadoraSCN.insereTrasnportadora( requestDTO ) ;
		}
		catch ( TransportadoraException e )
		{
			logger.error( e ) ;
			
			result.set( "erro", e.getMessage( ) ) ;
		}
		
		return( result ) ;
	}

	public ServiceDTO deletarTrasnportadora( ServiceDTO requestDTO ) throws BaseException
	{
		try
		{
			result = TransportadoraSCN.delete( requestDTO ) ;
		}
		catch ( TransportadoraException e )
		{
			result.set( "erro", e.getMessage( ) ) ;
		}
		
		return( result ) ;
	}

	public ServiceDTO pesquisarTodasTransportadoras( ) throws BaseException
	{
		try
		{
			result = TransportadoraSCN.pesquisar( ) ;
		}
		catch ( TransportadoraException e )
		{
			result.set( "erro", e.getMessage( ) ) ;
		}
		
		return( result ) ;
	}

	public ServiceDTO pesquisarTransportadora( ServiceDTO requestDTO ) throws BaseException
	{
		try
		{
			result = TransportadoraSCN.pesquisar( requestDTO ) ;
		}
		catch ( TransportadoraException e )
		{
			result.set( "erro", e.getMessage( ) ) ;
		}
		
		return( result ) ;
	}

	public ServiceDTO inserirProduto( ServiceDTO requestDTO ) throws BaseException
	{
		try
		{
			result = ProdutoSCN.inserir( requestDTO ) ;
		}
		catch ( ProdutoException e )
		{
			result.set( "erro", e.getMessage( ) ) ;
		}
		
		return( result ) ;
	}

	public ServiceDTO deletarProduto( ServiceDTO requestDTO ) throws BaseException
	{
		try
		{
			result = ProdutoSCN.deletar( requestDTO ) ;
		}
		catch ( ProdutoException e )
		{
			result.set( "erro", e.getMessage( ) ) ;
		}
		
		return( result ) ;
	}

	public ServiceDTO pesquisarTodosProdutos( ) throws BaseException
	{
		try
		{
			result = ProdutoSCN.pesquisar( ) ;
		}
		catch ( ProdutoException e )
		{
			result.set( "erro", e.getMessage( ) ) ;
		}
		
		return( result ) ;
	}

	public ServiceDTO pesquisarProduto( ServiceDTO requestDTO ) throws BaseException
	{
		try
		{
			result = ProdutoSCN.pesquisar( requestDTO ) ;
		}
		catch ( ProdutoException e )
		{
			result.set( "erro", e.getMessage( ) ) ;
		}
		
		return( result ) ;
	}
	
	public ServiceDTO pesquisarTodosConhecimentos()throws BaseException{
		try{
			result=ConhecimentoSCN.pesquisar();
		}
		catch(Throwable err){
			logger.error(err.getMessage());
			result.clearAttributes();
			result.set("erro", "falha ao pesquisar todos");
		}
		return result;
	}
	
	public ServiceDTO deletarConhecimento(ServiceDTO request)throws BaseException{
		try{
			result=ConhecimentoSCN.deletar(request);
		}
		catch(Throwable err){
			logger.error(err.getMessage());
			result.clearAttributes();
			result.set("erro", "falha ao excluir");
		}
		return result;
	}
	
	public ServiceDTO inserirConhecimento(ServiceDTO request)throws BaseException{
		try{
			result=ConhecimentoSCN.inserir(request);
		}
		catch(Throwable err){
			logger.error(err.getMessage());
			result.clearAttributes();
			result.set("erro", "falha ao inserir");
		}
		return result;
	}
}
